﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FrbaCommerce.Abm_Cliente
{
    public partial class ModificacionCliente : Form
    {

        public Int32 clienteAModificar;
        private int rolUsuarioLogueado;
        private int rolAdministrador = 1;

        public ModificacionCliente(Int32 idSelect, int usuarioLogueado)
        {
            InitializeComponent();
            this.clienteAModificar = idSelect;
            this.rolUsuarioLogueado = AccessData.adRol.obtenerRolusuario(usuarioLogueado);

            if (rolUsuarioLogueado == rolAdministrador)
            {
                comboBoxHabilitado.Visible = true;
                labelEstado.Visible = true;
                //completo manualmente el comboboxHabilitado
                comboBoxHabilitado.Items.Add("Deshabilitado");
                comboBoxHabilitado.Items.Add("Habilitado"); 
                textBoxModContraseña.Visible = true;
                label1.Visible = true;                
            }
            else
            {
                comboBoxHabilitado.Visible = false;
                labelEstado.Visible = false;
                textBoxModContraseña.Visible = false;
                label1.Visible = false;
            }

            //completo manualmente el comboboxTipoDoc
            comboBoxTipoDoc.Items.Add("DNI");
            comboBoxTipoDoc.Items.Add("CUIL");
            comboBoxTipoDoc.Items.Add("LE");
            comboBoxTipoDoc.Items.Add("LC");
            cargarDatosDelClienteSeleccionado();

        }


        public Gets_and_Sets.Cliente_getset cliAnt;
        public Int16 rolCliente = 1;
        private void cargarDatosDelClienteSeleccionado()
        {

            cliAnt = AccessData.adCliente.buscarCliente(clienteAModificar);
            cliAnt.Habilitado = AccessData.adUsuario.buscarEstadoUsuario(clienteAModificar);

            textBoxNombre.Text = cliAnt.Nombre;
            textBoxApellido.Text = cliAnt.Apellido;
            textBoxNroDoc.Text = Convert.ToString(cliAnt.Dni);
            textBoxNroCalle.Text = Convert.ToString(cliAnt.Nro_Calle);
            textBoxCodPostal.Text = cliAnt.Cod_Postal;
            textBoxCalle.Text = cliAnt.Dom_Calle;
            textBoxDpto.Text = cliAnt.Dpto;
            textBoxFechaNac.Text = Convert.ToString(cliAnt.Fecha_Nac);
            textBoxPiso.Text = Convert.ToString(cliAnt.Piso);
            textBoxMail.Text = cliAnt.Mail;
            textBoxTel.Text = cliAnt.Telefono;
            textBoxLocalidad.Text = cliAnt.Localidad;

            if (cliAnt.Habilitado.Equals(1))
            {
                labelEstado.Visible = false;
                comboBoxHabilitado.Visible = false;
                comboBoxHabilitado.Text = "Habilitado";
            }
            else
            {
                comboBoxHabilitado.Text = "Deshabilitado";
            }
            comboBoxTipoDoc.Text = cliAnt.Tipo_doc;

        }


        private void verificarDNIyTelefono()
        {

            if (cliAnt.Telefono != textBoxTel.Text)
            {
                AccessData.adTelefonos.validarTelefono(textBoxTel.Text);
            }
            if (cliAnt.Dni != Convert.ToDecimal(textBoxNroDoc.Text))
            {
                AccessData.adNroDoc.validarDni(Convert.ToDecimal(textBoxNroDoc.Text));
            }
        }



        private void validarTipoDeDatosIngresados()
        {

            Codigo_reutilizable.Validaciones.ValidarTipoDni(textBoxNroDoc.Text);

            Codigo_reutilizable.Validaciones.ValidarTipoNroCalle(textBoxNroCalle.Text);

            if (!string.IsNullOrEmpty(textBoxPiso.Text))
            {
                Codigo_reutilizable.Validaciones.ValidarTipoPiso(textBoxPiso.Text);
            }
        }


        private void inicializarCliente(Gets_and_Sets.Cliente_getset cli)
        {


            cli.Nombre = Convert.ToString(textBoxNombre.Text);
            cli.Apellido = Convert.ToString(textBoxApellido.Text);
            cli.Dni = Convert.ToInt32(textBoxNroDoc.Text);
            cli.Tipo_doc = Convert.ToString(comboBoxTipoDoc.SelectedItem);
            cli.Fecha_Nac = Convert.ToString(textBoxFechaNac.Text);
            cli.Mail = Convert.ToString(textBoxMail.Text);
            cli.Dom_Calle = Convert.ToString(textBoxCalle.Text);
            cli.Nro_Calle = Convert.ToInt32(textBoxNroCalle.Text);
            cli.Dpto = Convert.ToString(textBoxDpto.Text);
            cli.Cod_Postal = Convert.ToString(textBoxCodPostal.Text);
            cli.Telefono = Convert.ToString(textBoxTel.Text);
            cli.Localidad = Convert.ToString(textBoxLocalidad.Text);
            if (Convert.ToString(comboBoxHabilitado.SelectedItem) == "Habilitado")
            {
                cli.Habilitado = 1;
            }
            else
            {
                cli.Habilitado = 0;
            }
            //asigno la contraseña modificada (el filtro de si esta cambiada lo hago despues)
            Codigo_reutilizable.PasswordHash password = new Codigo_reutilizable.PasswordHash();
            cli.Contraseña = password.SHA256Encrypt(textBoxModContraseña.Text);
        

            //hace esto para que pueda existir gente que no vive en edificio
            if (!string.IsNullOrEmpty(textBoxPiso.Text))
            {
                cli.Piso = Convert.ToInt32(textBoxPiso.Text);
            }



        }

        private void buttonLimpiar_Click(object sender, EventArgs e)
        {
            Codigo_reutilizable.Limpiar.LimpiarText(this);
            Codigo_reutilizable.Limpiar.LimpiarMaskedTextBox(this);
            Codigo_reutilizable.Limpiar.BlanquearControles(this);
        }


        private void buttonGuardar_Click(object sender, EventArgs e)
        {
            Gets_and_Sets.Cliente_getset clienteModificado = new Gets_and_Sets.Cliente_getset();

            try
            {
                //----------------------------
                //VALIDACIONES EN LOS CAMPOS
                //----------------------------

                //Verifica si los otros datos ademas del telefono y la fecha ingresados no son nulos
                Codigo_reutilizable.Validaciones.NulidadDeDatosIngresados(this, textBoxTel);
                //verifico que la fecha y el telefono no sean nulos
                Codigo_reutilizable.Validaciones.validarTelyFechaNulos(textBoxFechaNac, textBoxTel);
                

                //Verifica si lo que se estan ingresando es correcto
                validarTipoDeDatosIngresados();

                //Verifica si la fecha está dentro del limite
                Codigo_reutilizable.Validaciones.ValidarFecha(textBoxFechaNac.Text);

                //Verifica si el DNI y Telefono ya no existen
                verificarDNIyTelefono(); //se fija si no es igual al que ingreso antes y no lo cambia

                //Inicializa el cliente con datos correctos
                inicializarCliente(clienteModificado);



                AccessData.adCliente.ActualizarCliente(clienteModificado, clienteAModificar);
                if (comboBoxHabilitado.Visible == true)
                {
                    AccessData.adUsuario.ActualizarEstadoUsuario(clienteModificado, clienteAModificar);
                }
                if (textBoxModContraseña.Text != "")
                {
                    AccessData.adUsuario.ActualizarContraseñaUsuario(clienteModificado, clienteAModificar);
                }

                this.Close();


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }


        }

    }
}
